
Taken fron the OpenCV Docs
Background subtraction (BS) is a common and widely used technique for generating a foreground mask (namely, a binary image containing the pixels belonging to moving objects in the scene) by using static cameras.
As the name suggests, BS calculates the foreground mask performing a subtraction between the current frame and a background model, containing the static part of the scene or, more in general, everything that can be considered as background given the characteristics of the observed scene.

Background modeling consists of two main steps:
In the first step, an initial model of the background is computed, while in the second step that model is updated in order to adapt to possible changes in the scene.
Fonni ayirish (BS) statik kameralar yordamida oldingi fon niqobini (masalan, sahnadagi harakatlanuvchi ob'ektlarga tegishli piksellarni o'z ichiga olgan ikkilik tasvir) yaratish uchun keng tarqalgan va keng qo'llaniladigan usuldir.
Nomidan ko'rinib turibdiki, BS sahnaning statik qismini yoki umuman olganda, kuzatilayotgan sahnaning xususiyatlarini hisobga olgan holda fon sifatida ko'rib chiqilishi mumkin bo'lgan barcha narsalarni o'z ichiga olgan joriy ramka va fon modeli o'rtasida ayirishni amalga oshiruvchi oldingi fon niqobini hisoblab chiqadi.
Fonni modellashtirish ikki asosiy bosqichdan iborat:
Birinchi bosqichda fonning dastlabki modeli hisoblab chiqiladi, ikkinchi bosqichda esa bu model sahnadagi mumkin bo'lgan o'zgarishlarga moslashish uchun yangilanadi.
Background subtraction is a computer vision technique where we seek to isolate the background from the 'moving' foreground. Consider vehciles traversing a roadway, or persons walking along a sidewalk.
It sounds simple in theory (i.e. just keep the station pixels and remove the ones that were changing). However, things like lighting condition changes, shadows etc. can make things get more complicated.
Several algorithms were introduced for this purpose. In the following, we will have a look at two algorithms from the bgsegm module.
Fonni ayirma - bu kompyuterni ko'rish usuli bo'lib, biz fonni "harakatlanuvchi" oldingi plandan ajratishga harakat qilamiz. Yo'ldan o'tayotgan transport vositalarini yoki piyodalar yo'lakchasi bo'ylab ketayotgan odamlarni ko'rib chiqing.
Nazariy jihatdan oddiy ko'rinadi (ya'ni, faqat stantsiya piksellarini saqlang va o'zgaruvchanlarini olib tashlang). Biroq, yorug'lik holatining o'zgarishi, soyalar va boshqalar kabi narsalarni murakkablashtirishi mumkin.
Shu maqsadda bir nechta algoritmlar kiritilgan. Quyida biz bgsegm modulidan ikkita algoritmni ko'rib chiqamiz.
import cv2
import numpy as np
from matplotlib import pyplot as plt
# Define our imshow function
def imshow(title = "Image", image = None, size = 10):
w, h = image.shape[0], image.shape[1]
aspect_ratio = w/h
plt.figure(figsize=(size * aspect_ratio,size))
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title(title)
plt.show()
In this paper, we propose a background subtraction (BGS) method based on the Gaussian mixture models using color and depth information. For combining color and depth information, we used the probabilistic model based on Gaussian distribution. In particular, we focused on solving color camouflage problem and depth denoising. For evaluating our method, we built a new dataset containing normal, color camouflage and depth camouflage situations. The dataset files consist of color, depth and ground truth image sequences. With these files, we compared the proposed algorithm with the conventional color-based BGS techniques in terms of precision, recall and F-measure. As a result, our method showed the best performance. Thus, this technique will help to robustly detect regions of interest as pre-processing in high-level image processing stages.
Link to Paper - https://www.researchgate.net/publication/283026260_Background_subtraction_based_on_Gaussian_mixture_models_using_color_and_depth_information
Ushbu maqolada biz rang va chuqurlik ma'lumotlaridan foydalangan holda Gauss aralashmasi modellariga asoslangan fonni olib tashlash (BGS) usulini taklif qilamiz. Rang va chuqurlik ma'lumotlarini birlashtirish uchun biz Gauss taqsimotiga asoslangan ehtimollik modelidan foydalandik. Xususan, biz ranglarni kamuflyaj muammosini va chuqurlikni yo'qotish muammosini hal qilishga e'tibor qaratdik. Bizning usulimizni baholash uchun biz oddiy, rangli kamuflyaj va chuqurlikdagi kamuflyaj holatlarini o'z ichiga olgan yangi ma'lumotlar to'plamini yaratdik. Ma'lumotlar to'plami fayllari rang, chuqurlik va asosiy haqiqat tasvirlari ketma-ketliklaridan iborat. Ushbu fayllar yordamida biz taklif qilingan algoritmni an'anaviy rangga asoslangan BGS texnikasi bilan aniqlik, eslab qolish va F o'lchovi nuqtai nazaridan solishtirdik. Natijada, bizning usulimiz eng yaxshi ko'rsatkichni ko'rsatdi. Shunday qilib, ushbu uslub yuqori darajadagi tasvirni qayta ishlash bosqichlarida oldindan ishlov berish sifatida qiziqish hududlarini ishonchli aniqlashga yordam beradi.
cap = cv2.VideoCapture('Datasets/videos/walking.mp4')
w = int(cap.get(3)) #3 frame eni olchami
h = int(cap.get(4)) #4 parametr frame boyi olchami
fourcc = cv2.VideoWriter_fourcc(*'MPV4')
#out = cv2.VideoWriter('Datasets/videos/walking_GaussianM.mp4', fourcc, 30, (w, h))#here 3-frame
#initialize background subtraction
bsMOG = cv2.bgsegm.createBackgroundSubtractorMOG()
while cap.isOpened():
ret, frame = cap.read()
if ret:
#bse ni apply methodidan foydalanib foreground maskni olamiz.
foreground_mask = bsMOG.apply(frame)
#out.write(foreground_mask) #ajralgan foregroundni yozib ko'ramiz.
imshow('Foreground mask', foreground_mask)
#cv2.imshow('foreground_mask', foreground_mask)
if cv2.waitKey(1) & 0xFF==ord('q'):
break
else:
break
cap.release()
#out.release()
cv2.destroyAllWindows()
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Input In [6], in <cell line: 12>() 14 ret, frame = cap.read() 16 if ret: 17 #bse ni apply methodidan foydalanib foreground maskni olamiz. ---> 18 foreground_mask = bsMOG.apply(frame) 19 #out.write(foreground_mask) #ajralgan foregroundni yozib ko'ramiz. 20 imshow('Foreground mask', foreground_mask) KeyboardInterrupt:
Background subtraction is a common computer vision task. We analyze the usual pixel-level approach. We develop an efficient adaptive algorithm using Gaussian mixture probability density. Recursive equations are used to constantly update the parameters and but also to simultaneously select the appropriate number of components for each pixel.
Orqa fonni olib tashlash - bu kompyuterni ko'rishning keng tarqalgan vazifasi. Biz odatdagi piksel darajasidagi yondashuvni tahlil qilamiz. Biz Gauss aralashmasi ehtimoli zichligidan foydalangan holda samarali adaptiv algoritmni ishlab chiqamiz. Rekursiv tenglamalar parametrlarni doimiy ravishda yangilash uchun, shuningdek, bir vaqtning o'zida har bir piksel uchun mos keladigan komponentlar sonini tanlash uchun ishlatiladi.
cap = cv2.VideoCapture('Datasets/videos/walking.mp4')
w = int(cap.get(3)) #3 frame eni olchami
h = int(cap.get(4)) #4 parametr frame boyi olchami
fps = int(cap.get(5)) #5 parametr fps
print('Frames per second : ', fps,'FPS')
frame_count = cap.get(7)
print('Frame count : ', frame_count)
fourcc = cv2.VideoWriter_fourcc(*'MPV4')
out = cv2.VideoWriter('Datasets/videos/walking_AdaptiveGM.mp4', fourcc, 30, (w, h))
# Initlaize background subtractor
bsGSOC = cv2.bgsegm.createBackgroundSubtractorGSOC()
# Loop once video is successfully loaded
while True:
ret, frame = cap.read()
if ret:
#bs ni apply methodidan foydalanib foreground maskni olamiz.
foreground_mask = bsGSOC.apply(frame)
#out.write(foreground_mask)
#imshow("Foreground Mask", foreground_mask)
cv2.imshow('foreground_mask', foreground_mask)
if cv2.waitKey(1) & 0xFF==ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
Frames per second : 30 FPS Frame count : 461.0
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Input In [2], in <cell line: 17>() 22 foreground_mask = bsGSOC.apply(frame) 23 #out.write(foreground_mask) 24 # ---> 25 imshow("Foreground Mask", foreground_mask) 27 res = cv2.bitwise_and(gray, foreground_mask) 28 cv2.imshow('foreground_mask', res) Input In [1], in imshow(title, image, size) 10 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) 11 plt.title(title) ---> 12 plt.show() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\pyplot.py:368, in show(*args, **kwargs) 324 """ 325 Display all open figures. 326 (...) 365 explicitly there. 366 """ 367 _warn_if_gui_out_of_main_thread() --> 368 return _backend_mod.show(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib_inline\backend_inline.py:41, in show(close, block) 39 try: 40 for figure_manager in Gcf.get_all_fig_managers(): ---> 41 display( 42 figure_manager.canvas.figure, 43 metadata=_fetch_figure_metadata(figure_manager.canvas.figure) 44 ) 45 finally: 46 show._to_draw = [] File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\display_functions.py:298, in display(include, exclude, metadata, transient, display_id, raw, clear, *objs, **kwargs) 296 publish_display_data(data=obj, metadata=metadata, **kwargs) 297 else: --> 298 format_dict, md_dict = format(obj, include=include, exclude=exclude) 299 if not format_dict: 300 # nothing to display (e.g. _ipython_display_ took over) 301 continue File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:178, in DisplayFormatter.format(self, obj, include, exclude) 176 md = None 177 try: --> 178 data = formatter(obj) 179 except: 180 # FIXME: log the exception 181 raise File ~\anaconda3\envs\data_science\lib\site-packages\decorator.py:232, in decorate.<locals>.fun(*args, **kw) 230 if not kwsyntax: 231 args, kw = fix(args, kw, sig) --> 232 return caller(func, *(extras + args), **kw) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:222, in catch_format_error(method, self, *args, **kwargs) 220 """show traceback on failed format call""" 221 try: --> 222 r = method(self, *args, **kwargs) 223 except NotImplementedError: 224 # don't warn on NotImplementedErrors 225 return self._check_return(None, args[0]) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:339, in BaseFormatter.__call__(self, obj) 337 pass 338 else: --> 339 return printer(obj) 340 # Finally look for special method names 341 method = get_real_method(obj, self.print_method) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\pylabtools.py:151, in print_figure(fig, fmt, bbox_inches, base64, **kwargs) 148 from matplotlib.backend_bases import FigureCanvasBase 149 FigureCanvasBase(fig) --> 151 fig.canvas.print_figure(bytes_io, **kw) 152 data = bytes_io.getvalue() 153 if fmt == 'svg': File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backend_bases.py:2295, in FigureCanvasBase.print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs) 2289 renderer = _get_renderer( 2290 self.figure, 2291 functools.partial( 2292 print_method, orientation=orientation) 2293 ) 2294 with getattr(renderer, "_draw_disabled", nullcontext)(): -> 2295 self.figure.draw(renderer) 2297 if bbox_inches: 2298 if bbox_inches == "tight": File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:73, in _finalize_rasterization.<locals>.draw_wrapper(artist, renderer, *args, **kwargs) 71 @wraps(draw) 72 def draw_wrapper(artist, renderer, *args, **kwargs): ---> 73 result = draw(artist, renderer, *args, **kwargs) 74 if renderer._rasterizing: 75 renderer.stop_rasterizing() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer) 47 if artist.get_agg_filter() is not None: 48 renderer.start_filter() ---> 50 return draw(artist, renderer) 51 finally: 52 if artist.get_agg_filter() is not None: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\figure.py:2810, in Figure.draw(self, renderer) 2807 # ValueError can occur when resizing a window. 2809 self.patch.draw(renderer) -> 2810 mimage._draw_list_compositing_images( 2811 renderer, self, artists, self.suppressComposite) 2813 for sfig in self.subfigs: 2814 sfig.draw(renderer) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite) 130 if not_composite or not has_images: 131 for a in artists: --> 132 a.draw(renderer) 133 else: 134 # Composite any adjacent images together 135 image_group = [] File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer) 47 if artist.get_agg_filter() is not None: 48 renderer.start_filter() ---> 50 return draw(artist, renderer) 51 finally: 52 if artist.get_agg_filter() is not None: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:3046, in _AxesBase.draw(self, renderer) 3043 for spine in self.spines.values(): 3044 artists.remove(spine) -> 3046 self._update_title_position(renderer) 3048 if not self.axison: 3049 for _axis in self._get_axis_list(): File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:2996, in _AxesBase._update_title_position(self, renderer) 2994 _log.debug('top of Axes not in the figure, so title not moved') 2995 return -> 2996 if title.get_window_extent(renderer).ymin < top: 2997 _, y = self.transAxes.inverted().transform((0, top)) 2998 title.set_position((x, y)) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\text.py:910, in Text.get_window_extent(self, renderer, dpi) 907 raise RuntimeError('Cannot get window extent w/o renderer') 909 with cbook._setattr_cm(self.figure, dpi=dpi): --> 910 bbox, info, descent = self._get_layout(self._renderer) 911 x, y = self.get_unitless_position() 912 x, y = self.get_transform().transform((x, y)) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\text.py:309, in Text._get_layout(self, renderer) 306 ys = [] 308 # Full vertical extent of font, including ascenders and descenders: --> 309 _, lp_h, lp_d = renderer.get_text_width_height_descent( 310 "lp", self._fontproperties, 311 ismath="TeX" if self.get_usetex() else False) 312 min_dy = (lp_h - lp_d) * self._linespacing 314 for i, line in enumerate(lines): File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backends\backend_agg.py:270, in RendererAgg.get_text_width_height_descent(self, s, prop, ismath) 268 flags = get_hinting_flag() 269 font = self._get_agg_font(prop) --> 270 font.set_text(s, 0.0, flags=flags) 271 w, h = font.get_width_height() # width and height of unrotated string 272 d = font.get_descent() KeyboardInterrupt:
cap = cv2.VideoCapture('Datasets/videos/walking.mp4')
# Initlaize background subtractor
bsGSOC = cv2.bgsegm.createBackgroundSubtractorGSOC()
# Loop once video is successfully loaded
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
if ret:
#bs ni apply methodidan foydalanib foreground maskni olamiz.
foreground_mask = bsGSOC.apply(frame)
res = cv2.bitwise_and(gray, foreground_mask)
imshow("Foreground Mask", res)
else:
break
cap.release()
cv2.destroyAllWindows()
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Input In [3], in <cell line: 8>() 13 foreground_mask = bsGSOC.apply(frame) 14 res = cv2.bitwise_and(gray, foreground_mask) ---> 16 imshow("Foreground Mask", res) 18 else: 19 break Input In [2], in imshow(title, image, size) 10 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) 11 plt.title(title) ---> 12 plt.show() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\pyplot.py:368, in show(*args, **kwargs) 324 """ 325 Display all open figures. 326 (...) 365 explicitly there. 366 """ 367 _warn_if_gui_out_of_main_thread() --> 368 return _backend_mod.show(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib_inline\backend_inline.py:41, in show(close, block) 39 try: 40 for figure_manager in Gcf.get_all_fig_managers(): ---> 41 display( 42 figure_manager.canvas.figure, 43 metadata=_fetch_figure_metadata(figure_manager.canvas.figure) 44 ) 45 finally: 46 show._to_draw = [] File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\display_functions.py:298, in display(include, exclude, metadata, transient, display_id, raw, clear, *objs, **kwargs) 296 publish_display_data(data=obj, metadata=metadata, **kwargs) 297 else: --> 298 format_dict, md_dict = format(obj, include=include, exclude=exclude) 299 if not format_dict: 300 # nothing to display (e.g. _ipython_display_ took over) 301 continue File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:178, in DisplayFormatter.format(self, obj, include, exclude) 176 md = None 177 try: --> 178 data = formatter(obj) 179 except: 180 # FIXME: log the exception 181 raise File ~\anaconda3\envs\data_science\lib\site-packages\decorator.py:232, in decorate.<locals>.fun(*args, **kw) 230 if not kwsyntax: 231 args, kw = fix(args, kw, sig) --> 232 return caller(func, *(extras + args), **kw) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:222, in catch_format_error(method, self, *args, **kwargs) 220 """show traceback on failed format call""" 221 try: --> 222 r = method(self, *args, **kwargs) 223 except NotImplementedError: 224 # don't warn on NotImplementedErrors 225 return self._check_return(None, args[0]) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:339, in BaseFormatter.__call__(self, obj) 337 pass 338 else: --> 339 return printer(obj) 340 # Finally look for special method names 341 method = get_real_method(obj, self.print_method) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\pylabtools.py:151, in print_figure(fig, fmt, bbox_inches, base64, **kwargs) 148 from matplotlib.backend_bases import FigureCanvasBase 149 FigureCanvasBase(fig) --> 151 fig.canvas.print_figure(bytes_io, **kw) 152 data = bytes_io.getvalue() 153 if fmt == 'svg': File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backend_bases.py:2299, in FigureCanvasBase.print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs) 2297 if bbox_inches: 2298 if bbox_inches == "tight": -> 2299 bbox_inches = self.figure.get_tightbbox( 2300 renderer, bbox_extra_artists=bbox_extra_artists) 2301 if pad_inches is None: 2302 pad_inches = rcParams['savefig.pad_inches'] File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\figure.py:1641, in FigureBase.get_tightbbox(self, renderer, bbox_extra_artists) 1637 if ax.get_visible(): 1638 # some axes don't take the bbox_extra_artists kwarg so we 1639 # need this conditional.... 1640 try: -> 1641 bbox = ax.get_tightbbox( 1642 renderer, bbox_extra_artists=bbox_extra_artists) 1643 except TypeError: 1644 bbox = ax.get_tightbbox(renderer) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:4619, in _AxesBase.get_tightbbox(self, renderer, call_axes_locator, bbox_extra_artists, for_layout_only) 4617 if self.xaxis.get_visible(): 4618 try: -> 4619 bb_xaxis = self.xaxis.get_tightbbox( 4620 renderer, for_layout_only=for_layout_only) 4621 except TypeError: 4622 # in case downstream library has redefined axis: 4623 bb_xaxis = self.xaxis.get_tightbbox(renderer) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:1108, in Axis.get_tightbbox(self, renderer, for_layout_only) 1105 self._update_label_position(renderer) 1107 # go back to just this axis's tick labels -> 1108 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes( 1109 ticks_to_draw, renderer) 1111 self._update_offset_text_position(ticklabelBoxes, ticklabelBoxes2) 1112 self.offsetText.set_text(self.major.formatter.get_offset()) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:1085, in Axis._get_tick_bboxes(self, ticks, renderer) 1083 def _get_tick_bboxes(self, ticks, renderer): 1084 """Return lists of bboxes for ticks' label1's and label2's.""" -> 1085 return ([tick.label1.get_window_extent(renderer) 1086 for tick in ticks if tick.label1.get_visible()], 1087 [tick.label2.get_window_extent(renderer) 1088 for tick in ticks if tick.label2.get_visible()]) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:1085, in <listcomp>(.0) 1083 def _get_tick_bboxes(self, ticks, renderer): 1084 """Return lists of bboxes for ticks' label1's and label2's.""" -> 1085 return ([tick.label1.get_window_extent(renderer) 1086 for tick in ticks if tick.label1.get_visible()], 1087 [tick.label2.get_window_extent(renderer) 1088 for tick in ticks if tick.label2.get_visible()]) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\text.py:912, in Text.get_window_extent(self, renderer, dpi) 910 bbox, info, descent = self._get_layout(self._renderer) 911 x, y = self.get_unitless_position() --> 912 x, y = self.get_transform().transform((x, y)) 913 bbox = bbox.translated(x, y) 914 return bbox File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\transforms.py:1503, in Transform.transform(self, values) 1500 values = values.reshape((-1, self.input_dims)) 1502 # Transform the values -> 1503 res = self.transform_affine(self.transform_non_affine(values)) 1505 # Convert the result back to the shape of the input values. 1506 if ndim == 0: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\transforms.py:2419, in CompositeGenericTransform.transform_affine(self, points) 2417 def transform_affine(self, points): 2418 # docstring inherited -> 2419 return self.get_affine().transform(points) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\transforms.py:2446, in CompositeGenericTransform.get_affine(self) 2444 return self._b.get_affine() 2445 else: -> 2446 return Affine2D(np.dot(self._b.get_affine().get_matrix(), 2447 self._a.get_affine().get_matrix())) File <__array_function__ internals>:180, in dot(*args, **kwargs) KeyboardInterrupt:
The parameters if you wish to veer away from the default settings:
https://docs.opencv.org/master/de/de1/group__video__motion.html#gac9be925771f805b6fdb614ec2292006d
cap = cv2.VideoCapture('Datasets/videos/walking.mp4')
# Get the height and width of the frame (required to be an interfer)
w = int(cap.get(3))
h = int(cap.get(4))
# Define the codec and create VideoWriter object.The output is stored in 'outpy.avi' file.
out = cv2.VideoWriter('Datasets/videos/output/walking_Bsubtraction_KNN.mp4', cv2.VideoWriter_fourcc(*'MPV4'), 30, (w, h))
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
bsKNN = cv2.createBackgroundSubtractorKNN()
while(1):
ret, frame = cap.read()
if ret:
fgmask = bsKNN.apply(frame)
fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel) #denoising qilish uchun qollandi
imshow('frame', fgmask)
# cv2.imshow('Background substruction KNN', fgmask)
# if cv2.waitKey(1) & 0xFF==ord('q'):
# break
else:
break
cap.release()
out.release()
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Input In [2], in <cell line: 13>() 17 fgmask = bsKNN.apply(frame) 18 fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel) #denoising qilish uchun qollandi ---> 20 imshow('frame', fgmask) 21 # cv2.imshow('Background substruction KNN', fgmask) 22 23 # if cv2.waitKey(1) & 0xFF==ord('q'): 24 # break 25 26 else: 27 break Input In [1], in imshow(title, image, size) 10 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) 11 plt.title(title) ---> 12 plt.show() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\pyplot.py:368, in show(*args, **kwargs) 324 """ 325 Display all open figures. 326 (...) 365 explicitly there. 366 """ 367 _warn_if_gui_out_of_main_thread() --> 368 return _backend_mod.show(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib_inline\backend_inline.py:41, in show(close, block) 39 try: 40 for figure_manager in Gcf.get_all_fig_managers(): ---> 41 display( 42 figure_manager.canvas.figure, 43 metadata=_fetch_figure_metadata(figure_manager.canvas.figure) 44 ) 45 finally: 46 show._to_draw = [] File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\display_functions.py:298, in display(include, exclude, metadata, transient, display_id, raw, clear, *objs, **kwargs) 296 publish_display_data(data=obj, metadata=metadata, **kwargs) 297 else: --> 298 format_dict, md_dict = format(obj, include=include, exclude=exclude) 299 if not format_dict: 300 # nothing to display (e.g. _ipython_display_ took over) 301 continue File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:178, in DisplayFormatter.format(self, obj, include, exclude) 176 md = None 177 try: --> 178 data = formatter(obj) 179 except: 180 # FIXME: log the exception 181 raise File ~\anaconda3\envs\data_science\lib\site-packages\decorator.py:232, in decorate.<locals>.fun(*args, **kw) 230 if not kwsyntax: 231 args, kw = fix(args, kw, sig) --> 232 return caller(func, *(extras + args), **kw) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:222, in catch_format_error(method, self, *args, **kwargs) 220 """show traceback on failed format call""" 221 try: --> 222 r = method(self, *args, **kwargs) 223 except NotImplementedError: 224 # don't warn on NotImplementedErrors 225 return self._check_return(None, args[0]) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\formatters.py:339, in BaseFormatter.__call__(self, obj) 337 pass 338 else: --> 339 return printer(obj) 340 # Finally look for special method names 341 method = get_real_method(obj, self.print_method) File ~\anaconda3\envs\data_science\lib\site-packages\IPython\core\pylabtools.py:151, in print_figure(fig, fmt, bbox_inches, base64, **kwargs) 148 from matplotlib.backend_bases import FigureCanvasBase 149 FigureCanvasBase(fig) --> 151 fig.canvas.print_figure(bytes_io, **kw) 152 data = bytes_io.getvalue() 153 if fmt == 'svg': File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backend_bases.py:2319, in FigureCanvasBase.print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs) 2315 try: 2316 # _get_renderer may change the figure dpi (as vector formats 2317 # force the figure dpi to 72), so we need to set it again here. 2318 with cbook._setattr_cm(self.figure, dpi=dpi): -> 2319 result = print_method( 2320 filename, 2321 facecolor=facecolor, 2322 edgecolor=edgecolor, 2323 orientation=orientation, 2324 bbox_inches_restore=_bbox_inches_restore, 2325 **kwargs) 2326 finally: 2327 if bbox_inches and restore_bbox: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backend_bases.py:1648, in _check_savefig_extra_args.<locals>.wrapper(*args, **kwargs) 1640 _api.warn_deprecated( 1641 '3.3', name=name, removal='3.6', 1642 message='%(name)s() got unexpected keyword argument "' 1643 + arg + '" which is no longer supported as of ' 1644 '%(since)s and will become an error ' 1645 '%(removal)s') 1646 kwargs.pop(arg) -> 1648 return func(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\_api\deprecation.py:412, in delete_parameter.<locals>.wrapper(*inner_args, **inner_kwargs) 402 deprecation_addendum = ( 403 f"If any parameter follows {name!r}, they should be passed as " 404 f"keyword, not positionally.") 405 warn_deprecated( 406 since, 407 name=repr(name), (...) 410 else deprecation_addendum, 411 **kwargs) --> 412 return func(*inner_args, **inner_kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backends\backend_agg.py:540, in FigureCanvasAgg.print_png(self, filename_or_obj, metadata, pil_kwargs, *args) 490 @_check_savefig_extra_args 491 @_api.delete_parameter("3.5", "args") 492 def print_png(self, filename_or_obj, *args, 493 metadata=None, pil_kwargs=None): 494 """ 495 Write the figure to a PNG file. 496 (...) 538 *metadata*, including the default 'Software' key. 539 """ --> 540 FigureCanvasAgg.draw(self) 541 mpl.image.imsave( 542 filename_or_obj, self.buffer_rgba(), format="png", origin="upper", 543 dpi=self.figure.dpi, metadata=metadata, pil_kwargs=pil_kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\backends\backend_agg.py:436, in FigureCanvasAgg.draw(self) 432 # Acquire a lock on the shared font cache. 433 with RendererAgg.lock, \ 434 (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar 435 else nullcontext()): --> 436 self.figure.draw(self.renderer) 437 # A GUI class may be need to update a window using this draw, so 438 # don't forget to call the superclass. 439 super().draw() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:73, in _finalize_rasterization.<locals>.draw_wrapper(artist, renderer, *args, **kwargs) 71 @wraps(draw) 72 def draw_wrapper(artist, renderer, *args, **kwargs): ---> 73 result = draw(artist, renderer, *args, **kwargs) 74 if renderer._rasterizing: 75 renderer.stop_rasterizing() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer) 47 if artist.get_agg_filter() is not None: 48 renderer.start_filter() ---> 50 return draw(artist, renderer) 51 finally: 52 if artist.get_agg_filter() is not None: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\figure.py:2810, in Figure.draw(self, renderer) 2807 # ValueError can occur when resizing a window. 2809 self.patch.draw(renderer) -> 2810 mimage._draw_list_compositing_images( 2811 renderer, self, artists, self.suppressComposite) 2813 for sfig in self.subfigs: 2814 sfig.draw(renderer) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite) 130 if not_composite or not has_images: 131 for a in artists: --> 132 a.draw(renderer) 133 else: 134 # Composite any adjacent images together 135 image_group = [] File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer) 47 if artist.get_agg_filter() is not None: 48 renderer.start_filter() ---> 50 return draw(artist, renderer) 51 finally: 52 if artist.get_agg_filter() is not None: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:3082, in _AxesBase.draw(self, renderer) 3079 a.draw(renderer) 3080 renderer.stop_rasterizing() -> 3082 mimage._draw_list_compositing_images( 3083 renderer, self, artists, self.figure.suppressComposite) 3085 renderer.close_group('axes') 3086 self.stale = False File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite) 130 if not_composite or not has_images: 131 for a in artists: --> 132 a.draw(renderer) 133 else: 134 # Composite any adjacent images together 135 image_group = [] File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer) 47 if artist.get_agg_filter() is not None: 48 renderer.start_filter() ---> 50 return draw(artist, renderer) 51 finally: 52 if artist.get_agg_filter() is not None: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:646, in _ImageBase.draw(self, renderer, *args, **kwargs) 644 renderer.draw_image(gc, l, b, im, trans) 645 else: --> 646 im, l, b, trans = self.make_image( 647 renderer, renderer.get_image_magnification()) 648 if im is not None: 649 renderer.draw_image(gc, l, b, im) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:956, in AxesImage.make_image(self, renderer, magnification, unsampled) 953 transformed_bbox = TransformedBbox(bbox, trans) 954 clip = ((self.get_clip_box() or self.axes.bbox) if self.get_clip_on() 955 else self.figure.bbox) --> 956 return self._make_image(self._A, bbox, transformed_bbox, clip, 957 magnification, unsampled=unsampled) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:557, in _ImageBase._make_image(self, A, in_bbox, out_bbox, clip_bbox, magnification, unsampled, round_to_pixel_border) 554 alpha = self._get_scalar_alpha() 555 output_alpha = _resample( # resample alpha channel 556 self, A[..., 3], out_shape, t, alpha=alpha) --> 557 output = _resample( # resample rgb channels 558 self, _rgb_to_rgba(A[..., :3]), out_shape, t, alpha=alpha) 559 output[..., 3] = output_alpha # recombine rgb and alpha 561 # at this point output is either a 2D array of normed data 562 # (of int or float) 563 # or an RGBA array of re-sampled input File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\image.py:193, in _resample(image_obj, data, out_shape, transform, resample, alpha) 191 if resample is None: 192 resample = image_obj.get_resample() --> 193 _image.resample(data, out, transform, 194 _interpd_[interpolation], 195 resample, 196 alpha, 197 image_obj.get_filternorm(), 198 image_obj.get_filterrad()) 199 return out KeyboardInterrupt:
cap = cv2.VideoCapture('Datasets/videos/walking.mp4')
# Get the height and width of the frame (required to be an interfer)
w = int(cap.get(3))
h = int(cap.get(4))
# Define the codec and create VideoWriter object.The output is stored in 'outpy.avi' file.
out = cv2.VideoWriter('Datasets/videos/output/walking_foreground.mp4', cv2.VideoWriter_fourcc(*'MPV4'), 30, (w, h))
ret, frame = cap.read()
# Create a flaot numpy array with frame values
average = np.float32(frame)
while True:
ret, frame = cap.read()
if ret:
# 0.01 is the weight of image, play around to see how it changes
cv2.accumulateWeighted(frame, average, 0.01)
# Scales, calculates absolute values, and converts the result to 8-bit
background = cv2.convertScaleAbs(average)
imshow('Input', frame)
imshow('Disapearing Background', background)
out.write(background)
# cv2.imshow("original", frame)
# cv2.imshow('Disapearing Background', background)
# if cv2.waitKey(1) & 0xFF==ord('q'):
# break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Input In [15], in <cell line: 14>() 24 background = cv2.convertScaleAbs(average) 26 imshow('Input', frame) ---> 27 imshow('Disapearing Background', background) 28 out.write(background) 29 # cv2.imshow("original", frame) 30 # cv2.imshow('Disapearing Background', background) 31 # if cv2.waitKey(1) & 0xFF==ord('q'): (...) 34 35 else: Input In [2], in imshow(title, image, size) 8 aspect_ratio = w/h 9 plt.figure(figsize=(size * aspect_ratio,size)) ---> 10 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) 11 plt.title(title) 12 plt.show() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\_api\deprecation.py:456, in make_keyword_only.<locals>.wrapper(*args, **kwargs) 450 if len(args) > name_idx: 451 warn_deprecated( 452 since, message="Passing the %(name)s %(obj_type)s " 453 "positionally is deprecated since Matplotlib %(since)s; the " 454 "parameter will become keyword-only %(removal)s.", 455 name=name, obj_type=f"parameter of {func.__name__}()") --> 456 return func(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\pyplot.py:2640, in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, interpolation_stage, filternorm, filterrad, resample, url, data, **kwargs) 2634 @_copy_docstring_and_deprecators(Axes.imshow) 2635 def imshow( 2636 X, cmap=None, norm=None, aspect=None, interpolation=None, 2637 alpha=None, vmin=None, vmax=None, origin=None, extent=None, *, 2638 interpolation_stage=None, filternorm=True, filterrad=4.0, 2639 resample=None, url=None, data=None, **kwargs): -> 2640 __ret = gca().imshow( 2641 X, cmap=cmap, norm=norm, aspect=aspect, 2642 interpolation=interpolation, alpha=alpha, vmin=vmin, 2643 vmax=vmax, origin=origin, extent=extent, 2644 interpolation_stage=interpolation_stage, 2645 filternorm=filternorm, filterrad=filterrad, resample=resample, 2646 url=url, **({"data": data} if data is not None else {}), 2647 **kwargs) 2648 sci(__ret) 2649 return __ret File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\pyplot.py:2262, in gca(**kwargs) 2260 @_copy_docstring_and_deprecators(Figure.gca) 2261 def gca(**kwargs): -> 2262 return gcf().gca(**kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\figure.py:1515, in FigureBase.gca(self, **kwargs) 1505 _api.warn_deprecated( 1506 "3.4", 1507 message="Calling gca() with keyword arguments was deprecated " (...) 1512 "axes with non-default arguments, use plt.axes() or " 1513 "plt.subplot().") 1514 if self._axstack.empty(): -> 1515 return self.add_subplot(1, 1, 1, **kwargs) 1516 else: 1517 return self._axstack() File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\figure.py:772, in FigureBase.add_subplot(self, *args, **kwargs) 769 args = tuple(map(int, str(args[0]))) 770 projection_class, pkw = self._process_projection_requirements( 771 *args, **kwargs) --> 772 ax = subplot_class_factory(projection_class)(self, *args, **pkw) 773 key = (projection_class, pkw) 774 return self._add_axes_internal(ax, key) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_subplots.py:34, in SubplotBase.__init__(self, fig, *args, **kwargs) 15 """ 16 Parameters 17 ---------- (...) 31 Keyword arguments are passed to the Axes (sub)class constructor. 32 """ 33 # _axes_class is set in the subplot_class_factory ---> 34 self._axes_class.__init__(self, fig, [0, 0, 1, 1], **kwargs) 35 # This will also update the axes position. 36 self.set_subplotspec(SubplotSpec._from_subplot_args(fig, args)) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\_api\deprecation.py:456, in make_keyword_only.<locals>.wrapper(*args, **kwargs) 450 if len(args) > name_idx: 451 warn_deprecated( 452 since, message="Passing the %(name)s %(obj_type)s " 453 "positionally is deprecated since Matplotlib %(since)s; the " 454 "parameter will become keyword-only %(removal)s.", 455 name=name, obj_type=f"parameter of {func.__name__}()") --> 456 return func(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:632, in _AxesBase.__init__(self, fig, rect, facecolor, frameon, sharex, sharey, label, xscale, yscale, box_aspect, **kwargs) 629 self.set_axisbelow(mpl.rcParams['axes.axisbelow']) 631 self._rasterization_zorder = None --> 632 self.cla() 634 # funcs used to format x and y - fall back on major formatters 635 self.fmt_xdata = None File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:1249, in _AxesBase.cla(self) 1246 self.legend_ = None 1247 self.containers = [] -> 1249 self.grid(False) # Disable grid on init to use rcParameter 1250 self.grid(self._gridOn, which=mpl.rcParams['axes.grid.which'], 1251 axis=mpl.rcParams['axes.grid.axis']) 1252 props = font_manager.FontProperties( 1253 size=mpl.rcParams['axes.titlesize'], 1254 weight=mpl.rcParams['axes.titleweight']) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\_api\deprecation.py:299, in rename_parameter.<locals>.wrapper(*args, **kwargs) 294 warn_deprecated( 295 since, message=f"The {old!r} parameter of {func.__name__}() " 296 f"has been renamed {new!r} since Matplotlib {since}; support " 297 f"for the old name will be dropped %(removal)s.") 298 kwargs[new] = kwargs.pop(old) --> 299 return func(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axes\_base.py:3226, in _AxesBase.grid(self, visible, which, axis, **kwargs) 3224 _api.check_in_list(['x', 'y', 'both'], axis=axis) 3225 if axis in ['x', 'both']: -> 3226 self.xaxis.grid(visible, which=which, **kwargs) 3227 if axis in ['y', 'both']: 3228 self.yaxis.grid(visible, which=which, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\_api\deprecation.py:299, in rename_parameter.<locals>.wrapper(*args, **kwargs) 294 warn_deprecated( 295 since, message=f"The {old!r} parameter of {func.__name__}() " 296 f"has been renamed {new!r} since Matplotlib {since}; support " 297 f"for the old name will be dropped %(removal)s.") 298 kwargs[new] = kwargs.pop(old) --> 299 return func(*args, **kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:1434, in Axis.grid(self, visible, which, **kwargs) 1431 if which in ['major', 'both']: 1432 gridkw['gridOn'] = (not self._major_tick_kw['gridOn'] 1433 if visible is None else visible) -> 1434 self.set_tick_params(which='major', **gridkw) 1435 self.stale = True File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:873, in Axis.set_tick_params(self, which, reset, **kw) 871 if which in ['major', 'both']: 872 self._major_tick_kw.update(kwtrans) --> 873 for tick in self.majorTicks: 874 tick._apply_params(**kwtrans) 875 if which in ['minor', 'both']: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:593, in _LazyTickList.__get__(self, instance, cls) 591 instance.majorTicks = [] 592 tick = instance._get_tick(major=True) --> 593 instance.majorTicks.append(tick) 594 return instance.majorTicks 595 else: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:592, in _LazyTickList.__get__(self, instance, cls) 590 if self._major: 591 instance.majorTicks = [] --> 592 tick = instance._get_tick(major=True) 593 instance.majorTicks.append(tick) 594 return instance.majorTicks File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:2057, in XAxis._get_tick(self, major) 2055 else: 2056 tick_kw = self._minor_tick_kw -> 2057 return XTick(self.axes, 0, major=major, **tick_kw) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:415, in XTick.__init__(self, *args, **kwargs) 414 def __init__(self, *args, **kwargs): --> 415 super().__init__(*args, **kwargs) 416 # x in data coords, y in axes coords 417 ax = self.axes File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\axis.py:172, in Tick.__init__(self, axes, loc, size, width, color, tickdir, pad, labelsize, labelcolor, zorder, gridOn, tick1On, tick2On, label1On, label2On, major, labelrotation, grid_color, grid_linestyle, grid_linewidth, grid_alpha, **kw) 166 self.gridline.get_path()._interpolation_steps = \ 167 GRIDLINE_INTERPOLATION_STEPS 168 self.label1 = mtext.Text( 169 np.nan, np.nan, 170 fontsize=labelsize, color=labelcolor, visible=label1On, 171 rotation=self._labelrotation[1]) --> 172 self.label2 = mtext.Text( 173 np.nan, np.nan, 174 fontsize=labelsize, color=labelcolor, visible=label2On, 175 rotation=self._labelrotation[1]) 177 self._apply_tickdir(tickdir) 179 for artist in [self.tick1line, self.tick2line, self.gridline, 180 self.label1, self.label2]: File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\text.py:160, in Text.__init__(self, x, y, text, color, verticalalignment, horizontalalignment, multialignment, fontproperties, rotation, linespacing, rotation_mode, usetex, wrap, transform_rotates_text, parse_math, **kwargs) 158 self._linespacing = linespacing 159 self.set_rotation_mode(rotation_mode) --> 160 self.update(kwargs) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\text.py:172, in Text.update(self, kwargs) 170 # Update bbox last, as it depends on font properties. 171 bbox = kwargs.pop("bbox", sentinel) --> 172 super().update(kwargs) 173 if bbox is not sentinel: 174 self.set_bbox(bbox) File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\artist.py:1055, in Artist.update(self, props) 1047 """ 1048 Update this artist's properties from the dict *props*. 1049 (...) 1052 props : dict 1053 """ 1054 ret = [] -> 1055 with cbook._setattr_cm(self, eventson=False): 1056 for k, v in props.items(): 1057 # Allow attributes we want to be able to update through 1058 # art.update, art.set, setp. 1059 if k == "axes": File ~\anaconda3\envs\data_science\lib\contextlib.py:135, in _GeneratorContextManager.__enter__(self) 133 del self.args, self.kwds, self.func 134 try: --> 135 return next(self.gen) 136 except StopIteration: 137 raise RuntimeError("generator didn't yield") from None File ~\anaconda3\envs\data_science\lib\site-packages\matplotlib\cbook\__init__.py:2014, in _setattr_cm(obj, **kwargs) 2009 left = _unfold(x[1:, :-1:cstride], 0, rstride, rstride)[..., ::-1] 2010 return (np.concatenate((top, right, bottom, left), axis=2) 2011 .reshape(-1, 2 * (rstride + cstride))) -> 2014 @contextlib.contextmanager 2015 def _setattr_cm(obj, **kwargs): 2016 """ 2017 Temporarily set some attributes; restore original state at context exit. 2018 """ 2019 sentinel = object() KeyboardInterrupt:
<Figure size 540x720 with 0 Axes>